{
"metadata": {
"widgets": {
"state": {},
"version": "1.1.2"
},
"kernelspec": {
"name": "python",
"display_name": "Python (Pyodide)",
"language": "python"
},
"language_info": {
"codemirror_mode": {
"name": "python",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8"
}
},
"nbformat_minor": 4,
"nbformat": 4,
"cells": [
{
"cell_type": "markdown",
"source": "# House Sales in King County, USA",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "This dataset contains house sale prices for King County, which includes Seattle. It includes homes sold between May 2014 and May 2015.",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "id : A notation for a house\n\n date : Date house was sold\n\n\nprice : Price is prediction target\n\n\nbedrooms : Number of bedrooms\n\n\nbathrooms : Number of bathrooms\n\nsqft_living : Square footage of the home\n\nsqft_lot : Square footage of the lot\n\n\nfloors :Total floors (levels) in house\n\n\nwaterfront :House which has a view to a waterfront\n\n\nview : Has been viewed\n\n\ncondition :How good the condition is overall\n\ngrade : overall grade given to the housing unit, based on King County grading system\n\n\nsqft_above : Square footage of house apart from basement\n\n\nsqft_basement : Square footage of the basement\n\nyr_built : Built Year\n\n\nyr_renovated : Year when house was renovated\n\nzipcode : Zip code\n\n\nlat : Latitude coordinate\n\nlong : Longitude coordinate\n\nsqft_living15 : Living room area in 2015(implies-- some renovations) This might or might not have affected the lotsize area\n\n\nsqft_lot15 : LotSize area in 2015(implies-- some renovations)",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "The following libraries are required ",
"metadata": {}
},
{
"cell_type": "code",
"source": "import pandas as pd\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport seaborn as sns\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler,PolynomialFeatures\nfrom sklearn.linear_model import LinearRegression\n%matplotlib inline",
"metadata": {},
"execution_count": 1,
"outputs": []
},
{
"cell_type": "markdown",
"source": "# Section 1: Importing Data Sets ",
"metadata": {}
},
{
"cell_type": "markdown",
"source": " Loading the csv: ",
"metadata": {}
},
{
"cell_type": "code",
"source": "file_name='https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DA0101EN/coursera/project/kc_house_data_NaN.csv'\ndf=pd.read_csv(file_name)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 2,
"outputs": []
},
{
"cell_type": "markdown",
"source": "\nWe use the method head
to display the first 5 columns of the dataframe.",
"metadata": {}
},
{
"cell_type": "code",
"source": "df.head()",
"metadata": {},
"execution_count": 3,
"outputs": [
{
"execution_count": 3,
"output_type": "execute_result",
"data": {
"text/html": "
\n\n
\n \n \n \n Unnamed: 0 \n id \n date \n price \n bedrooms \n bathrooms \n sqft_living \n sqft_lot \n floors \n waterfront \n ... \n grade \n sqft_above \n sqft_basement \n yr_built \n yr_renovated \n zipcode \n lat \n long \n sqft_living15 \n sqft_lot15 \n \n \n \n \n 0 \n 0 \n 7129300520 \n 20141013T000000 \n 221900.0 \n 3.0 \n 1.00 \n 1180 \n 5650 \n 1.0 \n 0 \n ... \n 7 \n 1180 \n 0 \n 1955 \n 0 \n 98178 \n 47.5112 \n -122.257 \n 1340 \n 5650 \n \n \n 1 \n 1 \n 6414100192 \n 20141209T000000 \n 538000.0 \n 3.0 \n 2.25 \n 2570 \n 7242 \n 2.0 \n 0 \n ... \n 7 \n 2170 \n 400 \n 1951 \n 1991 \n 98125 \n 47.7210 \n -122.319 \n 1690 \n 7639 \n \n \n 2 \n 2 \n 5631500400 \n 20150225T000000 \n 180000.0 \n 2.0 \n 1.00 \n 770 \n 10000 \n 1.0 \n 0 \n ... \n 6 \n 770 \n 0 \n 1933 \n 0 \n 98028 \n 47.7379 \n -122.233 \n 2720 \n 8062 \n \n \n 3 \n 3 \n 2487200875 \n 20141209T000000 \n 604000.0 \n 4.0 \n 3.00 \n 1960 \n 5000 \n 1.0 \n 0 \n ... \n 7 \n 1050 \n 910 \n 1965 \n 0 \n 98136 \n 47.5208 \n -122.393 \n 1360 \n 5000 \n \n \n 4 \n 4 \n 1954400510 \n 20150218T000000 \n 510000.0 \n 3.0 \n 2.00 \n 1680 \n 8080 \n 1.0 \n 0 \n ... \n 8 \n 1680 \n 0 \n 1987 \n 0 \n 98074 \n 47.6168 \n -122.045 \n 1800 \n 7503 \n \n \n
\n
5 rows × 22 columns
\n
",
"text/plain": " Unnamed: 0 id date price bedrooms bathrooms \\\n0 0 7129300520 20141013T000000 221900.0 3.0 1.00 \n1 1 6414100192 20141209T000000 538000.0 3.0 2.25 \n2 2 5631500400 20150225T000000 180000.0 2.0 1.00 \n3 3 2487200875 20141209T000000 604000.0 4.0 3.00 \n4 4 1954400510 20150218T000000 510000.0 3.0 2.00 \n\n sqft_living sqft_lot floors waterfront ... grade sqft_above \\\n0 1180 5650 1.0 0 ... 7 1180 \n1 2570 7242 2.0 0 ... 7 2170 \n2 770 10000 1.0 0 ... 6 770 \n3 1960 5000 1.0 0 ... 7 1050 \n4 1680 8080 1.0 0 ... 8 1680 \n\n sqft_basement yr_built yr_renovated zipcode lat long \\\n0 0 1955 0 98178 47.5112 -122.257 \n1 400 1951 1991 98125 47.7210 -122.319 \n2 0 1933 0 98028 47.7379 -122.233 \n3 910 1965 0 98136 47.5208 -122.393 \n4 0 1987 0 98074 47.6168 -122.045 \n\n sqft_living15 sqft_lot15 \n0 1340 5650 \n1 1690 7639 \n2 2720 8062 \n3 1360 5000 \n4 1800 7503 \n\n[5 rows x 22 columns]"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 1 \nDisplaing the data types of each column using the attribute dtype.",
"metadata": {}
},
{
"cell_type": "code",
"source": "df.dtypes",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 4,
"outputs": [
{
"execution_count": 4,
"output_type": "execute_result",
"data": {
"text/plain": "Unnamed: 0 int64\nid int64\ndate object\nprice float64\nbedrooms float64\nbathrooms float64\nsqft_living int64\nsqft_lot int64\nfloors float64\nwaterfront int64\nview int64\ncondition int64\ngrade int64\nsqft_above int64\nsqft_basement int64\nyr_built int64\nyr_renovated int64\nzipcode int64\nlat float64\nlong float64\nsqft_living15 int64\nsqft_lot15 int64\ndtype: object"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "We use the method describe to obtain a statistical summary of the dataframe.",
"metadata": {}
},
{
"cell_type": "code",
"source": "df.describe()",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 5,
"outputs": [
{
"execution_count": 5,
"output_type": "execute_result",
"data": {
"text/html": "\n\n
\n \n \n \n Unnamed: 0 \n id \n price \n bedrooms \n bathrooms \n sqft_living \n sqft_lot \n floors \n waterfront \n view \n ... \n grade \n sqft_above \n sqft_basement \n yr_built \n yr_renovated \n zipcode \n lat \n long \n sqft_living15 \n sqft_lot15 \n \n \n \n \n count \n 21613.00000 \n 2.161300e+04 \n 2.161300e+04 \n 21600.000000 \n 21603.000000 \n 21613.000000 \n 2.161300e+04 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n ... \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n \n \n mean \n 10806.00000 \n 4.580302e+09 \n 5.400881e+05 \n 3.372870 \n 2.115736 \n 2079.899736 \n 1.510697e+04 \n 1.494309 \n 0.007542 \n 0.234303 \n ... \n 7.656873 \n 1788.390691 \n 291.509045 \n 1971.005136 \n 84.402258 \n 98077.939805 \n 47.560053 \n -122.213896 \n 1986.552492 \n 12768.455652 \n \n \n std \n 6239.28002 \n 2.876566e+09 \n 3.671272e+05 \n 0.926657 \n 0.768996 \n 918.440897 \n 4.142051e+04 \n 0.539989 \n 0.086517 \n 0.766318 \n ... \n 1.175459 \n 828.090978 \n 442.575043 \n 29.373411 \n 401.679240 \n 53.505026 \n 0.138564 \n 0.140828 \n 685.391304 \n 27304.179631 \n \n \n min \n 0.00000 \n 1.000102e+06 \n 7.500000e+04 \n 1.000000 \n 0.500000 \n 290.000000 \n 5.200000e+02 \n 1.000000 \n 0.000000 \n 0.000000 \n ... \n 1.000000 \n 290.000000 \n 0.000000 \n 1900.000000 \n 0.000000 \n 98001.000000 \n 47.155900 \n -122.519000 \n 399.000000 \n 651.000000 \n \n \n 25% \n 5403.00000 \n 2.123049e+09 \n 3.219500e+05 \n 3.000000 \n 1.750000 \n 1427.000000 \n 5.040000e+03 \n 1.000000 \n 0.000000 \n 0.000000 \n ... \n 7.000000 \n 1190.000000 \n 0.000000 \n 1951.000000 \n 0.000000 \n 98033.000000 \n 47.471000 \n -122.328000 \n 1490.000000 \n 5100.000000 \n \n \n 50% \n 10806.00000 \n 3.904930e+09 \n 4.500000e+05 \n 3.000000 \n 2.250000 \n 1910.000000 \n 7.618000e+03 \n 1.500000 \n 0.000000 \n 0.000000 \n ... \n 7.000000 \n 1560.000000 \n 0.000000 \n 1975.000000 \n 0.000000 \n 98065.000000 \n 47.571800 \n -122.230000 \n 1840.000000 \n 7620.000000 \n \n \n 75% \n 16209.00000 \n 7.308900e+09 \n 6.450000e+05 \n 4.000000 \n 2.500000 \n 2550.000000 \n 1.068800e+04 \n 2.000000 \n 0.000000 \n 0.000000 \n ... \n 8.000000 \n 2210.000000 \n 560.000000 \n 1997.000000 \n 0.000000 \n 98118.000000 \n 47.678000 \n -122.125000 \n 2360.000000 \n 10083.000000 \n \n \n max \n 21612.00000 \n 9.900000e+09 \n 7.700000e+06 \n 33.000000 \n 8.000000 \n 13540.000000 \n 1.651359e+06 \n 3.500000 \n 1.000000 \n 4.000000 \n ... \n 13.000000 \n 9410.000000 \n 4820.000000 \n 2015.000000 \n 2015.000000 \n 98199.000000 \n 47.777600 \n -121.315000 \n 6210.000000 \n 871200.000000 \n \n \n
\n
8 rows × 21 columns
\n
",
"text/plain": " Unnamed: 0 id price bedrooms bathrooms \\\ncount 21613.00000 2.161300e+04 2.161300e+04 21600.000000 21603.000000 \nmean 10806.00000 4.580302e+09 5.400881e+05 3.372870 2.115736 \nstd 6239.28002 2.876566e+09 3.671272e+05 0.926657 0.768996 \nmin 0.00000 1.000102e+06 7.500000e+04 1.000000 0.500000 \n25% 5403.00000 2.123049e+09 3.219500e+05 3.000000 1.750000 \n50% 10806.00000 3.904930e+09 4.500000e+05 3.000000 2.250000 \n75% 16209.00000 7.308900e+09 6.450000e+05 4.000000 2.500000 \nmax 21612.00000 9.900000e+09 7.700000e+06 33.000000 8.000000 \n\n sqft_living sqft_lot floors waterfront view \\\ncount 21613.000000 2.161300e+04 21613.000000 21613.000000 21613.000000 \nmean 2079.899736 1.510697e+04 1.494309 0.007542 0.234303 \nstd 918.440897 4.142051e+04 0.539989 0.086517 0.766318 \nmin 290.000000 5.200000e+02 1.000000 0.000000 0.000000 \n25% 1427.000000 5.040000e+03 1.000000 0.000000 0.000000 \n50% 1910.000000 7.618000e+03 1.500000 0.000000 0.000000 \n75% 2550.000000 1.068800e+04 2.000000 0.000000 0.000000 \nmax 13540.000000 1.651359e+06 3.500000 1.000000 4.000000 \n\n ... grade sqft_above sqft_basement yr_built \\\ncount ... 21613.000000 21613.000000 21613.000000 21613.000000 \nmean ... 7.656873 1788.390691 291.509045 1971.005136 \nstd ... 1.175459 828.090978 442.575043 29.373411 \nmin ... 1.000000 290.000000 0.000000 1900.000000 \n25% ... 7.000000 1190.000000 0.000000 1951.000000 \n50% ... 7.000000 1560.000000 0.000000 1975.000000 \n75% ... 8.000000 2210.000000 560.000000 1997.000000 \nmax ... 13.000000 9410.000000 4820.000000 2015.000000 \n\n yr_renovated zipcode lat long sqft_living15 \\\ncount 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \nmean 84.402258 98077.939805 47.560053 -122.213896 1986.552492 \nstd 401.679240 53.505026 0.138564 0.140828 685.391304 \nmin 0.000000 98001.000000 47.155900 -122.519000 399.000000 \n25% 0.000000 98033.000000 47.471000 -122.328000 1490.000000 \n50% 0.000000 98065.000000 47.571800 -122.230000 1840.000000 \n75% 0.000000 98118.000000 47.678000 -122.125000 2360.000000 \nmax 2015.000000 98199.000000 47.777600 -121.315000 6210.000000 \n\n sqft_lot15 \ncount 21613.000000 \nmean 12768.455652 \nstd 27304.179631 \nmin 651.000000 \n25% 5100.000000 \n50% 7620.000000 \n75% 10083.000000 \nmax 871200.000000 \n\n[8 rows x 21 columns]"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "# Section 2: Data Wrangling",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "### Task 2 \nDroping the columns \"id\"
and \"Unnamed: 0\"
from axis 1 using the method drop()
, then I use the method describe()
to obtain a statistical summary of the data.",
"metadata": {}
},
{
"cell_type": "code",
"source": "df.drop(\"id\", axis = 1, inplace = True)\ndf.drop(\"Unnamed: 0\", axis = 1, inplace = True)\n\ndf.describe()",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 6,
"outputs": [
{
"execution_count": 6,
"output_type": "execute_result",
"data": {
"text/html": "\n\n
\n \n \n \n price \n bedrooms \n bathrooms \n sqft_living \n sqft_lot \n floors \n waterfront \n view \n condition \n grade \n sqft_above \n sqft_basement \n yr_built \n yr_renovated \n zipcode \n lat \n long \n sqft_living15 \n sqft_lot15 \n \n \n \n \n count \n 2.161300e+04 \n 21600.000000 \n 21603.000000 \n 21613.000000 \n 2.161300e+04 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n 21613.000000 \n \n \n mean \n 5.400881e+05 \n 3.372870 \n 2.115736 \n 2079.899736 \n 1.510697e+04 \n 1.494309 \n 0.007542 \n 0.234303 \n 3.409430 \n 7.656873 \n 1788.390691 \n 291.509045 \n 1971.005136 \n 84.402258 \n 98077.939805 \n 47.560053 \n -122.213896 \n 1986.552492 \n 12768.455652 \n \n \n std \n 3.671272e+05 \n 0.926657 \n 0.768996 \n 918.440897 \n 4.142051e+04 \n 0.539989 \n 0.086517 \n 0.766318 \n 0.650743 \n 1.175459 \n 828.090978 \n 442.575043 \n 29.373411 \n 401.679240 \n 53.505026 \n 0.138564 \n 0.140828 \n 685.391304 \n 27304.179631 \n \n \n min \n 7.500000e+04 \n 1.000000 \n 0.500000 \n 290.000000 \n 5.200000e+02 \n 1.000000 \n 0.000000 \n 0.000000 \n 1.000000 \n 1.000000 \n 290.000000 \n 0.000000 \n 1900.000000 \n 0.000000 \n 98001.000000 \n 47.155900 \n -122.519000 \n 399.000000 \n 651.000000 \n \n \n 25% \n 3.219500e+05 \n 3.000000 \n 1.750000 \n 1427.000000 \n 5.040000e+03 \n 1.000000 \n 0.000000 \n 0.000000 \n 3.000000 \n 7.000000 \n 1190.000000 \n 0.000000 \n 1951.000000 \n 0.000000 \n 98033.000000 \n 47.471000 \n -122.328000 \n 1490.000000 \n 5100.000000 \n \n \n 50% \n 4.500000e+05 \n 3.000000 \n 2.250000 \n 1910.000000 \n 7.618000e+03 \n 1.500000 \n 0.000000 \n 0.000000 \n 3.000000 \n 7.000000 \n 1560.000000 \n 0.000000 \n 1975.000000 \n 0.000000 \n 98065.000000 \n 47.571800 \n -122.230000 \n 1840.000000 \n 7620.000000 \n \n \n 75% \n 6.450000e+05 \n 4.000000 \n 2.500000 \n 2550.000000 \n 1.068800e+04 \n 2.000000 \n 0.000000 \n 0.000000 \n 4.000000 \n 8.000000 \n 2210.000000 \n 560.000000 \n 1997.000000 \n 0.000000 \n 98118.000000 \n 47.678000 \n -122.125000 \n 2360.000000 \n 10083.000000 \n \n \n max \n 7.700000e+06 \n 33.000000 \n 8.000000 \n 13540.000000 \n 1.651359e+06 \n 3.500000 \n 1.000000 \n 4.000000 \n 5.000000 \n 13.000000 \n 9410.000000 \n 4820.000000 \n 2015.000000 \n 2015.000000 \n 98199.000000 \n 47.777600 \n -121.315000 \n 6210.000000 \n 871200.000000 \n \n \n
\n
",
"text/plain": " price bedrooms bathrooms sqft_living sqft_lot \\\ncount 2.161300e+04 21600.000000 21603.000000 21613.000000 2.161300e+04 \nmean 5.400881e+05 3.372870 2.115736 2079.899736 1.510697e+04 \nstd 3.671272e+05 0.926657 0.768996 918.440897 4.142051e+04 \nmin 7.500000e+04 1.000000 0.500000 290.000000 5.200000e+02 \n25% 3.219500e+05 3.000000 1.750000 1427.000000 5.040000e+03 \n50% 4.500000e+05 3.000000 2.250000 1910.000000 7.618000e+03 \n75% 6.450000e+05 4.000000 2.500000 2550.000000 1.068800e+04 \nmax 7.700000e+06 33.000000 8.000000 13540.000000 1.651359e+06 \n\n floors waterfront view condition grade \\\ncount 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \nmean 1.494309 0.007542 0.234303 3.409430 7.656873 \nstd 0.539989 0.086517 0.766318 0.650743 1.175459 \nmin 1.000000 0.000000 0.000000 1.000000 1.000000 \n25% 1.000000 0.000000 0.000000 3.000000 7.000000 \n50% 1.500000 0.000000 0.000000 3.000000 7.000000 \n75% 2.000000 0.000000 0.000000 4.000000 8.000000 \nmax 3.500000 1.000000 4.000000 5.000000 13.000000 \n\n sqft_above sqft_basement yr_built yr_renovated zipcode \\\ncount 21613.000000 21613.000000 21613.000000 21613.000000 21613.000000 \nmean 1788.390691 291.509045 1971.005136 84.402258 98077.939805 \nstd 828.090978 442.575043 29.373411 401.679240 53.505026 \nmin 290.000000 0.000000 1900.000000 0.000000 98001.000000 \n25% 1190.000000 0.000000 1951.000000 0.000000 98033.000000 \n50% 1560.000000 0.000000 1975.000000 0.000000 98065.000000 \n75% 2210.000000 560.000000 1997.000000 0.000000 98118.000000 \nmax 9410.000000 4820.000000 2015.000000 2015.000000 98199.000000 \n\n lat long sqft_living15 sqft_lot15 \ncount 21613.000000 21613.000000 21613.000000 21613.000000 \nmean 47.560053 -122.213896 1986.552492 12768.455652 \nstd 0.138564 0.140828 685.391304 27304.179631 \nmin 47.155900 -122.519000 399.000000 651.000000 \n25% 47.471000 -122.328000 1490.000000 5100.000000 \n50% 47.571800 -122.230000 1840.000000 7620.000000 \n75% 47.678000 -122.125000 2360.000000 10083.000000 \nmax 47.777600 -121.315000 6210.000000 871200.000000 "
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "We can see we have missing values for the columns bedrooms
and bathrooms
",
"metadata": {}
},
{
"cell_type": "code",
"source": "print(\"number of NaN values for the column bedrooms :\", df['bedrooms'].isnull().sum())\nprint(\"number of NaN values for the column bathrooms :\", df['bathrooms'].isnull().sum())\n",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 8,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "number of NaN values for the column bedrooms : 13\nnumber of NaN values for the column bathrooms : 10\n"
}
]
},
{
"cell_type": "markdown",
"source": "\nWe can replace the missing values of the column 'bedrooms'
with the mean of the column 'bedrooms'
using the method replace()
. Don't forget to set the inplace
parameter to True
",
"metadata": {}
},
{
"cell_type": "code",
"source": "mean=df['bedrooms'].mean()\ndf['bedrooms'].replace(np.nan,mean, inplace=True)",
"metadata": {},
"execution_count": 9,
"outputs": []
},
{
"cell_type": "markdown",
"source": "\nWe also replace the missing values of the column 'bathrooms'
with the mean of the column 'bathrooms'
using the method replace()
. Don't forget to set the inplace
parameter top True
",
"metadata": {}
},
{
"cell_type": "code",
"source": "mean=df['bathrooms'].mean()\ndf['bathrooms'].replace(np.nan,mean, inplace=True)",
"metadata": {},
"execution_count": 10,
"outputs": []
},
{
"cell_type": "code",
"source": "print(\"number of NaN values for the column bedrooms :\", df['bedrooms'].isnull().sum())\nprint(\"number of NaN values for the column bathrooms :\", df['bathrooms'].isnull().sum())",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 11,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "number of NaN values for the column bedrooms : 0\nnumber of NaN values for the column bathrooms : 0\n"
}
]
},
{
"cell_type": "markdown",
"source": "# Section 3: Exploratory Data Analysis",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "### Task 3\nUsing the method value_counts
to count the number of houses with unique floor values.\n",
"metadata": {}
},
{
"cell_type": "code",
"source": "df['floors'].value_counts().to_frame()",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 12,
"outputs": [
{
"execution_count": 12,
"output_type": "execute_result",
"data": {
"text/html": "\n\n
\n \n \n \n floors \n \n \n \n \n 1.0 \n 10680 \n \n \n 2.0 \n 8241 \n \n \n 1.5 \n 1910 \n \n \n 3.0 \n 613 \n \n \n 2.5 \n 161 \n \n \n 3.5 \n 8 \n \n \n
\n
",
"text/plain": " floors\n1.0 10680\n2.0 8241\n1.5 1910\n3.0 613\n2.5 161\n3.5 8"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 4\nUsing the function boxplot
in the seaborn library to determine whether houses with a waterfront view or without a waterfront view have more price outliers.",
"metadata": {}
},
{
"cell_type": "code",
"source": "sns.boxplot(x=\"waterfront\", y=\"price\", data=df)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 13,
"outputs": [
{
"execution_count": 13,
"output_type": "execute_result",
"data": {
"text/plain": ""
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAERCAYAAABxZrw0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAVG0lEQVR4nO3dfZDdVX3H8c9nd8EkPIxlWRnyIBGDIII8rQ8tVnlYnNXWONNRkamyWmraWpPQFh21Th1nrNOZdmqTVC07lrIZFQsUHHRgNVtAHgR0EwIhBMctBsxGYV2Rp8TA7n77x70bdslmcwk5v98v575fMzu5v/u7955vNnc/OXvu+Z3jiBAAID8tZRcAAEiDgAeATBHwAJApAh4AMkXAA0CmCHgAyFTlAt72FbYft/1Ag4//gO0HbW+2/a3U9QHAwcJVmwdv++2SnpG0NiJO2cdjT5B0taTzIuIJ26+KiMeLqBMAqq5yPfiIuE3Sb6beZ/u1tvttr7d9u+2T6qc+JukrEfFE/bmEOwDUVS7g96JX0vKIOEvSZZK+Wr//dZJeZ/tO23fb7i6tQgComLayC9gX24dL+gNJ19ievPsV9T/bJJ0g6RxJCyXdbvuUiPht0XUCQNVUPuBV+y3jtxFx+gzntkm6OyKel/Rz2z9VLfB/UmSBAFBFlR+iiYinVAvv90uSa06rn/6OpHPr9x+t2pDNw6UUCgAVU7mAt32VpLsknWh7m+1LJP2ppEts3ydps6T31h/+fUmjth+UdIukT0bEaBl1A0DVVG6aJADgwEjag7f9N/ULkB6wfZXtOSnbAwC8IFkP3vYCSXdIOjkidtq+WtKNEXHl3p5z9NFHx+LFi5PUAwA5Wr9+/a8jomOmc6ln0bRJmmv7eUnzJG2f7cGLFy/W4OBg4pIAIB+2H9nbuWRDNBExLOlfJD0q6ZeSnoyIH8xQ3DLbg7YHR0ZGUpUDAE0nWcDb/j3VZru8RtJ8SYfZ/tCLHxcRvRHRGRGdHR0z/pYBANgPKT9k7ZL084gYqV+IdJ1qV6QCAAqQMuAflfRW2/NcW2PgfElbErYHAJgi5Rj8PZKulbRB0qZ6W72p2sMLRkdHtWLFCo2Ocs0X0MySzoOPiM9HxEkRcUpEfDgidqVsDzV9fX3atGmT1q5dW3YpAEpUuaUK8PKMjo6qv79fEaH+/n568UATI+Az09fXp4mJCUnS+Pg4vXigiRHwmRkYGNDY2JgkaWxsTOvWrSu5IgBlIeAz09XVpba22gXKbW1tuuCCC0quCEBZCPjM9PT0qKWl9s/a2tqqiy++uOSKAJSFgM9Me3u7uru7ZVvd3d1qb28vuyQAJTkYtuzDS9TT06OtW7fSeweaHAGfofb2dq1evbrsMgCUjCEaAMgUAQ8AmSLgASBTBDwAZIqAB4BMEfAAkCkCHgAyRcADKBQb0hSHgAdQKDakKU6ygLd9ou2NU76esn1pqvYAVB8b0hQr5Z6sP42I0yPidElnSdoh6fpU7QGoPjakKVZRQzTnS/q/iHikoPaaGmOcqCo2pClWUQH/QUlXzXTC9jLbg7YHR0ZGCionb4xxoqrYkKZYyQPe9qGSlkq6ZqbzEdEbEZ0R0dnR0ZG6nOwxxokqY0OaYhXRg3+XpA0R8VgBbTU9xjhRZWxIU6wiAv4i7WV4BgceY5youp6eHp166qn03guQNOBtz5N0gaTrUraDFzDGiaqb3JCG3nt6SQM+InZERHtEPJmyHbyAMU4Ak7iSNTOMcQKYxJ6sGWLTbQASAZ8lNt0GIDFEAwDZIuABIFMEPABkioAHgEwR8ACQKQIeADJFwANApgh4AMgUAQ8AmSLgASBTBDwAZIqAB4BMEfAAkCkCHgAylXrLvlfavtb2Q7a32P79lO0BAF6Qej34VZL6I+J9tg+VNC9xewCAumQBb/tISW+X9BFJiojnJD2Xqj0AwHQph2iOlzQi6b9s32v767YPe/GDbC+zPWh7cGRkJGE5ANBcUgZ8m6QzJX0tIs6Q9KykT7/4QRHRGxGdEdHZ0dGRsBwAaC4pA36bpG0RcU/9+FrVAh8AUIBkAR8Rv5L0C9sn1u86X9KDqdoDAEyXehbNcknfrM+geVjSRxO3BwCoSxrwEbFRUmfKNgAAM+NKVgDIFAGfodHRUa1YsUKjo6NllwKgRAR8hvr6+rRp0yatXbu27FIAlIiAz8zo6Kj6+/sVEerv76cXDzQxAj4zfX19mpiYkCSNj4/TiweaGAGfmYGBAY2NjUmSxsbGtG7dupIrAlAWAj4zXV1damurzX5ta2vTBRdcUHJFAMpCwGemp6dHLS21f9aWlhZdfPHFJVcEoCwEfGba29s1f/58SdL8+fPV3t5eckXAdEzjLQ4Bn5nR0VENDw9LkrZv384PESqHabzFIeAz09fXp4iQJE1MTPBDhEphGm+xCPjMMIsGVcY03mIR8JlhFg2qjA5IsQj4zEydRdPa2sosGlQKHZBiEfCZaW9vV3d3t2yru7ubWTSolJ6ent1DNBMTE3RAEku94QdK0NPTo61bt/LDAzQ5evAZam9v1+rVq+m9o3L6+vpkW5Jkmw9ZE0sa8La32t5ke6PtwZRtAai+gYEBjY+PS6rNouFD1rSK6MGfGxGnRwRb9wFNjg9Zi8UQDYDCMMurWKkDPiT9wPZ628tmeoDtZbYHbQ+OjIwkLgdAmZjlVazUs2jOjojttl8laZ3thyLitqkPiIheSb2S1NnZGYnrAVAyZnkVJ2kPPiK21/98XNL1kt6csj0A1ccsr+IkC3jbh9k+YvK2pHdKeiBVewCA6VIO0Rwj6fr6nNc2Sd+KiP6E7QEApkjWg4+IhyPitPrXGyLiH1O1BeDgwYYfxWGaJIBCseFHcQh4AIVhw49iEfAACsOGH8Ui4DPEGCeqig0/ikXAZ4gxTlRVV1fXtNUkWYsmLQI+M4xxosqWLl26e1P4iNB73vOekivKGwGfGcY4UWU33HDDtB78d7/73ZIryhsBnxnGOFFlAwMD03rwvD/TIuAzw3rbqDLen8Ui4DPDetuoMt6fxSLgM8N626gy3p/FIuAztHTpUs2bN48ZCqiknp4enXrqqfTeC0DAZ+iGG27Qjh07mKGASmI9+OI0HPC2j7PdVb89d3Ktd1QL8+ABTGoo4G1/TNK1ki6v37VQ0ndSFYX9xzx4AJMa7cH/taSzJT0lSRHxM0mvSlUU9h/z4AFMajTgd0XEc5MHttsksUF2BTHPGMCkRgP+h7Y/K2mu7QskXSOpoU/wbLfavtf29/a3SDSup6dn9xDNxMQEMxWAJtZowH9a0oikTZL+QtKNkj7X4HNXStry0ksDALwcjQb8XElXRMT7I+J9kq6o3zcr2wsl/ZGkr+9/iXgp+vr6pi3mxIesQPNqNOD/V9MDfa6kgQae92+SPiVpYm8PsL3M9qDtwZGRkQbLwd4MDAxofHxcUm0WDR+yAs2r0YCfExHPTB7Ub8+b7Qm2/1jS4xGxfrbHRURvRHRGRGdHR0eD5WBvurq6dq/10dLSwoesQBNrNOCftX3m5IHtsyTt3Mdzzpa01PZWSd+WdJ7tb+xXlWgYH7ICmNTW4OMulXSN7e3142MlXTjbEyLiM5I+I0m2z5F0WUR8aD/rRIOeeOKJPY65JByStGbNGg0NDZVdhoaHhyVJCxYsKLWOJUuWaPny5aXWkFpDPfiI+ImkkyT9laSPS3r9voZeUI4vfvGLsx4DZdu5c6d27tzXAAAOhFl78LbPi4ibbf/Ji06dYFsRcV0jjUTErZJu3b8S8VJs3bp11mM0r6r0VleuXClJWrVqVcmV5G9fQzTvkHSzpJnWnQ1JDQU8irNw4UJt27Zt9/GiRYtKrAZAmWYN+Ij4vO0WSTdFxNUF1YSXYdGiRdMCfuHChSVWA6BM+xyDj4gJSZ8ooBYcAPfcc8+sxwCaR6PTJNfZvsz2IttHTX4lrQz7ZXLH+r0dA2gejU6T/DPVxtw//qL7jz+w5eDlamlp2X0l6+QxgObU6E//yZK+Iuk+SRslrZH0hlRFYf91dXXNegygeTQa8H2SXi9ptWrh/vr6faiYZcuWzXoMoHk0OkRzYkScNuX4Ftv3pSgIAHBgNNqDv9f2WycPbL9F0p1pSsLLcfnll0877u3tLakSAGVrNODfIulHtrfWFw+7S9I7bG+yfX+y6vCSDQxMX8WZ5YKB5tXoEE130ipwwEyuJLm3YwDNo6GAj4hHUhcCADiwmCQNAJki4DNz1FFHzXoMoHkQ8Jl58sknZz0G0DwI+MxMXaZgpmMAzYOAB4BMJQt423Ns/9j2fbY32/5CqrYAAHtqdB78/tgl6byIeMb2IZLusH1TRNydsE0AQF2ygI/aQuTP1A8PqX+xODkAFCTpGLztVtsbJT0uaV1E7LG9kO1ltgdtD46MjKQsBwCaStKAj4jxiDhd0kJJb7Z9ygyP6Y2Izojo7OjoSFkOADSVQmbRRMRvJd0q1rQBgMKknEXTYfuV9dtzJXVJeihVewCA6VLOojlWUp/tVtX+I7k6Ir6XsD0AwBQpZ9HcL+mMVK8PAJgdV7ICQKYIeADIFAEPAJki4AEgUwQ8AGSKgAeATBHwAJApAh4AMkXAA0CmCHgAyBQBDwCZIuABIFMEPABkKuVywQDq1qxZo6GhobLLqITJ78PKlStLrqQalixZouXLlyd5bQIeKMDQ0JB+tvlevfrw8bJLKd2hz9cGDnY9MlhyJeV79JnWpK9PwAMFefXh4/rsmU+VXQYq5Esbjkz6+ozBA0CmUu7Jusj2Lba32N5smwE3AChQyiGaMUl/FxEbbB8hab3tdRHxYMI2AQB1yXrwEfHLiNhQv/20pC2SFqRqDwAwXSFj8LYXq7YB9z0znFtme9D24MjISBHlAEBTSB7wtg+X9D+SLo2IPaYQRERvRHRGRGdHR0fqcgCgaSQNeNuHqBbu34yI61K2BQCYLuUsGkv6T0lbIuJfU7UDAJhZyh782ZI+LOk82xvrX+9O2B4AYIpk0yQj4g5JTvX6AIDZcSUrAGSKgAeATBHwAJApAh4AMkXAA0CmCHgAyBQBDwCZIuABIFMEPABkij1ZgQIMDw/r2adbk+/BiYPLI0+36rDh4WSvTw8eADJFDx4owIIFC7Rr7Jf67Jl7bImAJvalDUfqFQvSbXRHDx4AMkXAA0CmCHgAyBQBDwCZ4kPWA2zNmjUaGhoqu4xpVq5cWVrbS5Ys0fLly0trH2hmKfdkvcL247YfSNUGAGDvUvbgr5T075LWJmyjcsrurZ5zzjl73Ldq1ariCwFQumQ9+Ii4TdJvUr0+ZjZnzpxpx3Pnzi2pEgBlK/1DVtvLbA/aHhwZGSm7nINef3//tOObbrqppEoAlK30gI+I3ojojIjOjo6OssvJCr13oLkxiyZDp512miTG3oFmV3oPHgCQRsppkldJukvSiba32b4kVVsAgD0lG6KJiItSvTZwMHr0GdaDl6THdtT6lcfMmyi5kvI9+kyrTkj4+ozBAwVYsmRJ2SVUxnP1K71fcRzfkxOU9r1BwAMFKPsCuCqZXDqDSQDpZRPwVVwDpiyT34cy16CpEtbDQbPKJuCHhoa08YEtGp93VNmllK7luZAkrX/4sZIrKV/rDi6mRvPKJuAlaXzeUdp50rvLLgMVMvehG8suASgN8+ABIFMEPABkKpshmuHhYbXueJJfyTFN645RDQ+PlV0GUAp68ACQqWx68AsWLNCvdrXxISummfvQjVqw4JiyywBKQQ8eADKVTQ9eqs15ZgxeavndU5KkiTmse1KbB08PXqrOxYBVuRCvGS6AyybgWevjBUNDT0uSlhxPsEnH8N6oGDaiKY4jouwaduvs7IzBwcGyyzjosdYH0Dxsr4+IzpnOMQYPAJki4AEgUwQ8AGQq6YestrslrZLUKunrEfFPKdurgirMVKjKLAWpOWYqAFWVck/WVklfkfQuSSdLusj2yanawwvmzp3LTAUASXvwb5Y0FBEPS5Ltb0t6r6QHE7ZZOnqrAKoi5Rj8Akm/mHK8rX7fNLaX2R60PTgyMpKwHABoLikD3jPct8ek+4jojYjOiOjs6OhIWA4ANJeUAb9N0qIpxwslbU/YHgBgipQB/xNJJ9h+je1DJX1Q0g0J2wMATJHsQ9aIGLP9CUnfV22a5BURsTlVewCA6ZLOg4+IGyWxvCMAlIArWQEgUwQ8AGSqUssF2x6R9EjZdWTiaEm/LrsIYC94fx44x0XEjHPMKxXwOHBsD+5tjWigbLw/i8EQDQBkioAHgEwR8PnqLbsAYBa8PwvAGDwAZIoePABkioAHgEwR8Bmy3W37p7aHbH+67HqASbavsP247QfKrqUZEPCZYatEVNyVkrrLLqJZEPD52b1VYkQ8J2lyq0SgdBFxm6TflF1HsyDg89PQVokA8kfA56ehrRIB5I+Azw9bJQKQRMDniK0SAUgi4LMTEWOSJrdK3CLparZKRFXYvkrSXZJOtL3N9iVl15QzlioAgEzRgweATBHwAJApAh4AMkXAA0CmCHgAyBQBj6Zk+1Lb8/bjeSfZ3mj7XtuvLasOoBFMk0RTsr1VUmdE/PolPKdV0iclzY2Iz7/onFX7eZpIXQfQKHrwOKjZ/pTtFfXbX7Z9c/32+ba/Yftrtgdtb7b9hfq5FZLmS7rF9i31+95p+y7bG2xfY/vw+v1bbf+D7TskXSjpUkl/bvsW24ttb7H9VUkbJC2y/c+2H7C9yfaF9dc4x/attq+1/ZDtb7pmjzqAA4mAx8HuNkl/WL/dKelw24dIepuk2yX9fUR0SnqjpHfYfmNErFZtfZ5zI+Jc20dL+pykrog4U9KgpL+d0sbvIuJtEfEtSf8h6csRcW793ImS1kbEGfX2T5d0mqQuSf9s+9j6485Q7T+HkyUdL+nsF9dxgL8vAAGPg956SWfZPkLSLtUug+9ULfRvl/QB2xsk3SvpDaoF7Iu9tX7/nbY3SuqRdNyU8/89S/uPRMTd9dtvk3RVRIxHxGOSfijpTfVzP46IbfUhnI2SFr/kvynwErWVXQDwckTE8/Vx7I9K+pGk+yWdK+m1knZKukzSmyLiCdtXSpozw8tY0rqIuGgvzTw7SwlTz820VPOkXVNuj4ufPRSAHjxycJtqQX6bar32v1Stl3ykagH8pO1jVNvGcNLTko6o375b0tm2l0iS7Xm2X7efdVxou9V2h6S3S/rxPp4ztQ7ggCLgkYPbJR0r6a760MjvJN0eEfepNjSzWdIVku6c8pxeSTfZviUiRiR9RNJVtu9XLfBP2o86rlftN4j7JN0s6VMR8at9PGd3HfvRHjArpkkCQKbowQNApgh4AMgUAQ8AmSLgASBTBDwAZIqAB4BMEfAAkKn/B6beAVavjmuTAAAAAElFTkSuQmCC\n",
"text/plain": ""
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 5\nUsing the function regplot
in the seaborn library to determine if the feature sqft_above
is negatively or positively correlated with price.",
"metadata": {}
},
{
"cell_type": "code",
"source": "sns.regplot(x=\"sqft_above\", y=\"price\", data=df, ci = None)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 14,
"outputs": [
{
"execution_count": 14,
"output_type": "execute_result",
"data": {
"text/plain": ""
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAESCAYAAAD38s6aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO29fXxdZ3Xn+117n1fpSLJsSXYcxzgmTkzCa3Bb0mZSF+gtfZlwpx9aoO3ty7ST3L5A6QwMtJfCTNq5Q257OyUd7kxS+saEQsEDLcMUWmhqDPNJoLEhgBMTJ3YSv0uWZekcnfe91/1j7310jnSOdGTpSEdH6wuKpH32y3O2j357PWutZy1RVQzDMIzew1nvARiGYRidwQTeMAyjRzGBNwzD6FFM4A3DMHoUE3jDMIwexQTeMAyjR+k6gReRPxWRcRH5dpv7/6SIPCkix0XkLzs9PsMwjI2CdFsevIjcBeSAj6jqS5fYdx/wCeC1qjolImOqOr4W4zQMw+h2us6CV9UjwJX6bSLyYhH5vIgcFZEvi8j+8KV/BXxIVafCY03cDcMwQrpO4FvwEPA2VX018E7g/wu33wzcLCL/S0QeE5E3rNsIDcMwuozYeg9gKUQkA3wv8EkRiTYnw+8xYB9wENgFfFlEXqqqV9d6nIZhGN1G1ws8wSzjqqq+sslrZ4HHVLUCnBaR7xAI/j+t5QANwzC6ka530ajqDIF4/wSABLwifPmvgR8It48QuGxOrctADcMwuoyuE3gR+RjwKHCLiJwVkV8Efhr4RRF5AjgOvDHc/e+ASRF5EvhH4F2qOrke4zYMw+g2ui5N0jAMw1gdOmrBi8hvhAuQvi0iHxORVCevZxiGYczRMQteRK4HvgLcqqoFEfkE8Leq+uetjhkZGdE9e/Z0ZDyGYRi9yNGjRy+r6miz1zqdRRMD0iJSAfqA84vtvGfPHh5//PEOD8kwDKN3EJHnW73WMReNqp4Dfh94AbgATKvq33fqeoZhGEYjHRN4ERkmyHa5EdgJ9IvIzzTZ7x4ReVxEHp+YmOjUcAzDMDYdnQyyvh44raoT4UKkTxGsSG1AVR9S1QOqemB0tKkbyTAMw7gGOinwLwCvEZE+CWoMvA54qoPXMwzDMOropA/+q8Ah4BjwrfBaD3XqeoZhGEYjHc2iUdX3A+/v5DUMwzDWk8MnxnnwyCnOTOW5YbiPe+/ay8H9Y+s9LKALSxUYhmFsFA6fGOd9nznOeLbIlnSc8WyR933mOIdPdEdrChN4wzCMa+TBI6eIu0JfIoZI8D3uCg8e6Y6ahybwhmEY18iZqTzpuNuwLR13OTuVX6cRNWICbxiGcY3cMNxHoeI1bCtUPHYN963TiBoxgTcMw7hG7r1rLxVPyZerqAbfK55y711713togAm8YRjGNXNw/xj33X0bYwMppgsVxgZS3Hf3bV2TRbMRWvYZhmF0LQf3j3WNoM/HLHjDMIwexQTeMAyjRzGBNwzD6FFM4A3DMHoUE3jDMIwexQTeMAyjRzGBNwzD6FFM4A3DMHoUE3jDMIwexVayGoaxYenmZhvdQMcseBG5RUS+Ufc1IyLv6NT1DMPYXHR7s41uoJM9Wb+jqq9U1VcCrwbywKc7dT3DMDYX3d5soxtYKx/864BnVfX5NbqeYRg9Trc32+gG1soH/xbgY81eEJF7gHsAdu/evUbDMQxjo3PDcB/j2SJ9iTkZ66ZmG/NZj3hBxy14EUkAdwOfbPa6qj6kqgdU9cDo6Ginh2MYRo/Q7c026lmveMFauGh+GDimqpfW4FqGYWwSur3ZRj3rFS9YCxfNW2nhnjEMw1gJ3dxso54zU3m2pOMN29YiXtBRC15E+oAfBD7VyesYhmF0M+vVnLujAq+qeVXdpqrTnbyOYRhGN7Ne8QIrVWAYhtFh1iteYKUKDMMw1oD1iBeYBW8YhtGjmMAbhmH0KCbwhmEYPYoJvGEYRo9iAm8YhtGjmMAbhmH0KCbwhmEYPYoJvGEYRo9iAm8YhtGjmMAbhmH0KCbwhmEYPYoJvGEYRo9iAm8YhtGjmMAbhmH0KCbwhmEYPUqnW/ZtEZFDInJCRJ4SkTs6eT3DMAxjjk43/Pgg8HlVfZOIJIDONiA0DMMwanRM4EVkELgL+HkAVS0D5U5dzzAMw2ikky6avcAE8Gci8nUR+bCI9M/fSUTuEZHHReTxiYmJDg7HMAxjc9FJgY8BtwP/RVVfBcwC75m/k6o+pKoHVPXA6OhoB4djGIaxueikwJ8FzqrqV8PfDxEIvmEYhrEGdEzgVfUicEZEbgk3vQ54slPXMwzDMBrpdBbN24CPhhk0p4Bf6PD1DMMwjJCOCryqfgM40MlrGIZhGM2xlayGYRg9igm8YRhGj2ICbxiG0aN0OshqGEYXcPjEOA8eOcWZqTw3DPdx7117Obh/bL2HZXQYs+ANo8c5fGKc933mOOPZIlvSccazRd73meMcPjG+3kMzOowJvGH0OA8eOUXcFfoSMUSC73FXePDIqfUemtFhTOANo8c5M5UnHXcbtqXjLmen8us0ImOtMIE3jB7nhuE+ChWvYVuh4rFr2Kp39zom8IbR49x7114qnpIvV1ENvlc85d679l7T+Q6fGOetDz3Gnfc/wlsfesx8+V2MCbxh9DgH949x3923MTaQYrpQYWwgxX1333ZNWTQWsN1YWJqkYSyTjZhyeHD/2KqMsT5gC9CXiJEvV3nwyKmuvwebEbPgDWMZbHYL1gK2GwsTeMNYBps95dACthsLE3jDWAab3YJd7YCt0VnMB28Yy+CG4T7Gs8WaDxq6w4Jdq7jAwf1j3Ecwkzk7lWfXBolBbFZM4A1jGdx7117e95nj5MtV0nGXQsVbdws2igvEXWmIC9wHHRN5E/SNgbloDGMZrGbK4Wqx2eMCRms6asGLyHNAFvCAqqpadydjw9NtFuyZqTxb0vGGbZspLmC0Zi1cND+gqpfX4DqGsSnp1riAsf6Yi8YwNjiW2WK0otMCr8Dfi8hREbmn2Q4ico+IPC4ij09MTHR4OIbRe3RjXMDoDkRVO3dykZ2qel5ExoAvAG9T1SOt9j9w4IA+/vjjHRuPYRhGryEiR1vFNztqwavq+fD7OPBp4Ls7eT3DMAxjjo4JvIj0i8hA9DPwvwHf7tT1DMMwjEY6mUWzHfi0iETX+UtV/XwHr2cYhmHU0TGBV9VTwCs6dX7DMAxjcaxUgWG0YCPWfTeMeiwP3jCasNnrvhu9gQm8YTTB6rsYvYAJvGE0YbPXfTd6A/PBG0YTNkN9F4sx9D5mwRtGE3q9vsv8GMPpyznuffgoB373C7z1occs1tAjmMAbRhN6vb5LfYwhW6wyOVvGVyVfqlpAuYcwF41htKDb6r6vJvU15C/nSjgI4kDFV/oSMfLlKg8eOdWz73+zYBa8YWxCbhjuo1DxACh7PiKgCgk3kAQLKPcGJvCGsQmpjzEkXAdPFVUYHUgCvRdQ3qyYwBvGJqQ+xpCOOzgibMvEySRjPRdQ3syYD94wNin1MYYoZfLsVJ5dljLZM5jAG0YXsN456b0cUN7MtO2iEZEXicjrw5/TUa13wzBWhtW9MTpFWwIvIv8KOAQ8GG7aBfx1pwZlGJsJq3tjdIp2LfhfBb4PmAFQ1ZOAzecMYxWwujdGp2hX4EuqWo5+EZEY0Llu3YaxiajPSY+wNEVjNWhX4L8kIr8FpEXkB4FPAv+jnQNFxBWRr4vIZ691kIbRyyxV9+bwiXHe+tBj3Hn/I1YnxlgW7Qr8e4AJ4FvAvcDfAu9t89hfB55a/tAMY3OwWN0bC8AaK6HdNMk08Keq+scQWOXhtkWdhCKyC/hR4D8A/3oF4zSMnqZVmmJ9ABawOjHGsmjXgv8HAkGPSANfbOO4PwT+LeC32kFE7hGRx0Xk8YmJiTaHYxibAwvAGiuhXYFPqWou+iX8edEIkIj8GDCuqkcX209VH1LVA6p6YHR0tM3hGMbmIArAZosVTk3kOHFxhmfGc2SStkbRWJp2PyWzInK7qh4DEJFXA4Uljvk+4G4R+REgBQyKyMOq+jPXPlzDWJpOrApdr5Wm9961l3cdeoKpfAVHQICqr0zkShw+MW5uGmNR2rXg3wF8UkS+LCJfBv4K+LXFDlDV31TVXaq6B3gL8IiJu9FpOhGUXM9A58H9Y2zrTxBzBQXirsP1W9IMpeO2EMpYkrYseFX9JxHZD9xCYEScUNVKR0dmGNdAJ4KS6x3ozJU9bhrNICK1bapqfnhjSRYVeBF5rao+IiI/Pu+lfSKCqn6qnYuo6mHg8LUN0eh21rtQVj31nYoiVhqU7MQ5l8NmaABudIalLPjvBx4B/nmT1xRoS+CN3iVyX8RdaXBf3AfXLPL1D4xMwkVEyJaqbT08OiGG6y2w9961l/d95jj5cpV03KVQ8axeu9EWiwq8qr5fRBzgc6r6iTUak7GBWG33Rf0DwxV4ZmIWgOu3pNp6eKymGEYPmqcvzZAreWztj7OtP7lqAtvuzOfg/jHuA6vXbiybJX3wquqLyK8BJvDGAurdF9lihYlsiVLV4+xUoRaEXI77pv6BcWoihytB6sjlXJm9o5klHx6rJYb1D5rrhtJczpW4Mluh4in7xgZWLLDLnflYvXbjWmg3TfILIvJOguyZ2Wijql7pyKiMDUPkvvB85fzVIiLgiCAC7zz0BAIMpuNtu2/qHxhlz68JfNkL1sq14/teDTGcPzMZHUjRn4wxNpDiY/e8ZkXnbnZ+W6FqdIJ20yT/JfArwJeAx+u+jE1OVCjr4nQR0Oj/bB9IkStVyRary6pzXl9ZMeE6qIJq8DOsne+70ytIbYWqsRa0K/C3Ah8CngC+AfwRcFunBmVsHKJCWUog7DFX2DmUZjAdx/OVqt9YpWIpEauvrDiSSeCp4vnKSCaxps2gO13C10oEG2tBuwL/F8BLgAcIxP0l4TbD4OD+MW7fPczurX3sHc0wGLpYXEeIOY0fsaVErL6yoq9w02g/+8Yy+EpDlcVOs1QJ35Vyx96tnJ0q8OSFaZ4dz3I5V7TMGGPVadcHf4uqvqLu938UkSc6MSBjfVhuLvv8/e/Yu5VDx841ZK9kkjEEWma0tLpmNwQUO5m5cvjEOIeOnWO4L062WKVU9bkyW+FXD+5e9/dt9BaiunRjJhH5c+C/qupj4e/fA/ycqv7Kag7mwIED+vjj5tpfa+ozOiIhni5UGM0km+afN9u/4ilvuv16Hj11pUEQoblItjrHWlno68lbH3psQV59vlxdtQCusbkQkaOqeqDZa+1a8N8D/KyIvBD+vht4SkS+BaiqvnwVxmlcA6uxinR+RkfVU67mK+SKVW4ayyzIfmmVAfLoqStNBWq965x300pb6PzK2G57v93EZrs37Qr8Gzo6CuOaWK1VpPMF53KuhCPgqdayX+rFdzUEaq1Ebv4ipdVYabtSOrkythMri3uFzXhv2gqyqurzi311epBGc+qt4HbTEJsxP6MjyjmPUhOhUXxXIwOkk1kk9dUfixUfX5XJXIVcqXrN92g16WQAd7U+E73IZrw31jVgA7NcK7jV9HT+8n7XEaqeMjqQrB1bL77tlANYaircyfoq9X/I0WIpBSayJQZS8SVnCvXWf8VTEjFn2atXF3v/nQzgrndhtG5mM94bE/guYrn+weVM9ZeantYLzp6tfUzOlnEdQVUXiO9SAtXOVHitRC7hOlQ9RZy5mcliM4Vo7OWqx0yxGuxf9nhuMtf2dL7d998Jt8B6F0brZjbjvTGB7xKuxT+4HCt4qaDmfMGJHjatxHcxgWo3gLoWIjeSSXJ+ugB+4I88eSlLxfeJO9K0I1I09slcFQfBcQRflZlClR1DsbaCwOtZhsAqT7ZmM94bE/guoR1RaGbh33f3bQuEGIJUvPr9ljs9XYn4RteKio+VvUBQpwvt94hZSbZD/R/yQCrGtmqCydkyFV9JxIRdW9JUfG36AI3GXquDA0hYC6fV/Zo/1qcvzXDdULphn6rnc+yFKe68/5GOZm9Y5cnWbMZ7YwLfJSwlwC0t/Ltva0hNbLXfQDJGoeKtyfT0huE+npvMMZmrIBKsaK34SrZYbauP6EqzHeb/Id84kmG4r0zZ8xfkns+3qiPrv+bakblaOM3uV7Ox5koel3MlRgdSAMwUKpy7WiTmrE32RjcsFOtWNtu96ZjAi0gKOAIkw+scUtX3d+p6G52l/IPtTvtb7aeqtcyNTk5PD58Y5+xUngvTpdq2mBNUlxzuiy/qpnjgi0/z4a+cZqZYxREY6U/Ql4i1fK9LBTLr973z/kfamsFE1v9AKsbkbBnfD6qnDfbHqXjKHXu3NsyOpmZLC+731v44V2Yr9CdjpOMul7JFAHYMpZqmnRpGp+ikBV8CXquqORGJA18Rkc9Fq2GNRpbyD7brYmm133Shwu+88aVtTU+Xco+0ev3wiXHedegJpvKNrpiqr4xlEoxkki1dQg988Wk++MgzOGHbUV9hPFcGYPtQesF7Xa6V3+wBOjlbYrbkLXCbRNZ/1ZshX/GphKUERvvhvz32fEP54+cmZ9m1pdEds60/ScVTxgZSnJ3Koxo0LBlIzf27rGf2xmZb7LOZ6ZjAa1ADIRf+Gg+/lq6LsElZyj/YbgbAYvu1Mz1dSjgXe/3BI6fIFqu4YWBSw9LBIjBb9hZ1CX34K6dxBGKOQ8Wby48fz5VJJ2LEXGk4drEZTfR6vYDNf4BOzpYYz5YZzSSavs9m5RSemchR9ZT+ZF0eteNwKVtiMJ1ouN/7xgZqrrOoNEE965W9sRkX+2xm2qpFc80nF3GBo8BNwIdU9d1N9rkHuAdg9+7dr37+eVs31Yx2a7estMZLfZ2UKEharHr0J2I88JZX8eCRUy3rqJyZynNxukDMdfB9qHh+7YnuOnD9lr6m433wyCkePTWJQLiCtnFMMUfY0hfn99/0itqxB373C+RL1SBw6jqMDiTJJGNcnCnWFrBUPZ9LMyUqvs++0Qw/8rLrarVypgsV+hJuzU8evY+E67ClL8GZqTwzhQr9SZeRTLDPiYszCBAPrzeRLVGoePgK1w0l2daf5HKuxFS+wkAqVsudB9al7k4zS32xfz+rg7MxWawWTUcFvm4AW4BPA29T1W+32s+KjS3OUqmL17pfvQC892++zZZ0nFypWuvQBIrnw84tafLlKjsGA19yhKoyXaiwa7iPr78whRJ0dfJ8pRLmng+kggdEq4fR6cuz+HUfRWFuupeKOdw40s/n3nFX7bh7Hz6Krxrm6geB0G2ZOLMlj9GBZEOHKVXFcaSh3HDkk69/HzOFMmevFtmzrY903OXExSwCXD+cZiAV59REjorn4+tc16ro70dESLhC2dMFvVvvuztonbCW2RutHvSzpQrXDaWb/vt9+d2v7dh4jM6xGsXGVoSqXhWRwwQ1bVoKvLE47WYArMQVE2XbTGRLtfZ7vg/JmBB3hXLVb5mNc+9de2s+eJVA+NzQ+v7Z17yIB4+c4r1/8+0GazJys4z0J2o+93q2DyQZHUg2pFg+eOQUw31xJmfLqB+4gHyUK7MVMkmXdNzl9OXZ2vgV8HytLUs/uH+sqSvr0kxjwDQZcyh7fm0F7EgmybmrBTxfcVxAg3PvHEoTc4WJbIldw6mmbqOP3fOaNXWBtHJhVTxds2wqY/1pt+HHshGR0dByR0TSwOuBE526nrE8WtXliLJtilUPUHxf8VFGMknScZeEKy3rqBzcP8bvvekV7BvLICKICDeN9vOzr3kRh46dYzxbbHiYPH1ppta2bvtQmrHMnB9bJBD3scHUAgE6M5VnJJOsCaungZtmIOly8/ZBChWPsucTGalRmmN9YLNpPRjfZ3tdeYaRTPBzseqhqsTc4GEVc2VB96p03GW27HVNG75WLQETMaejjUyM7qKTFvx1wF+EfngH+ISqfraD1zOWwZmpPK7AqYkcZc8n4TqMZBKUq/A7b3wpb//418mXPZIxYSSTYjAdJ1+usm/7YM36buZuaDZ7eOtDj7VlTW4fSuM4wlS+wq7hIHNmIltkKl9hulDhrQ89xr137a1Z34PpeK17VORHjoKpAhQrc+0CfYUTF7P0JdxaLv78oHY8zNePGEzHKVU98mWv5oL67R+9takfu1Dx6E+4K7aOVyvDpVWwPYoLbKbFPpuZTmbRfBN4VafOb6yMTMLlmYlZXBFcCYqLnbta5KbRfg7uH+OBt7yqwYdbL7T3f/4Eqtp2SlSr1E1V5exU4PJIxhzirlCo+CRCd4eqNvi0I8v/Tbdfv6B7VJSj/uCRU0zNlqjMi9RWfHBF6U+6C7JlIiK3Vf15EzGXD/z4yxcIYLOU1l+688am42rXOl7NDJfF0m43w2IfSwUN6JiLxuhuakE2qfuq217fG/XidIGpfIWt/XH6Ey4nx3Phw4GaCB0+Md5w/sMnxnnrQ49x5/2PMFOoMDlbanj9cq5UE++EKxQrHlcLVfoSDi/a1s/oQLL2+kgm1eBGevTUldrYpgsVxgZSNdEfzxbx/MCd4jpzgUSRIPtlJJNaUCI2Gut7/+bb9CfcWlmFVj1g6+9N/X5vf/3NTbe3KyyrWc621Rg3g8jVl4uuf1DO/4xuBqxUwSYlW6py/ZYUl3Plmotmx2CSXKla2yey9OpTJ09N5ALhVLicK7N3NNO0Zk69JVr1fMazQQA1yi6JHhgjmRQjmVTNVVSuzjUZqXg+F6dLXM6VG1Ihz07lF1ih9W6gih9k1zh+EHxNxhyQINAKi5eAiCzd33njSxcVw1ZW8GrU8KlnJT78zWCpN2M9i711GybwXcxqTDNbnSPy0Ub53OUwZ/zGkf4F56gXnrLn1yzjqPxuJELRtY69MBUGSVNIQmq55rMlj0q1QNkL0ien8xWSMZeBVFDcy5G5c84UKrWFUq4jVMO0x22ZOHu2ZZqOMYopVD2l6iuxcDYSZQJHDUyupQTEWrAZy9l2gs1Y970VJvBdymr4Y+ef47nJHPc+fJRM0mU0EyzKmS15OBJ4aCqez8nxLAd+9wsNDS7qhSfhOlTD+iz1gtmfcHnXoSfIFquUqoFIP38ljyPBH9dIJkHV8+lLxhlygxz5YsXj+cl8beWrD6TCzI/LuSBNE2VBKuR//BcLfdoDyRgnx3MNmTMVVdyw9SAKOwaTteBuVFPma89dIekKY4NzpQTaFYPV9vNuxnK2nWAzPSivzC5MLa7HBH4NWY4grIZlWX+ObLHCZK6CohQrPhVfmS1Va3niwXfFESFfqs4FNM9eZWq2xHOTs8Qdh8FUjCthrZkdmSSXc0WuzFaoej6ehoXFmFukpEotgBt3haG+qIBYkFYIgevEccDzqaVqlqpBud7h/jizZa/mRkrHnVoZgfp7mS1WUFWqfuM98BR2DSYYSCfIlYJMmzv2buXQsXPEXSEV5rqfv1pk5xYYSMXbEoPVegC3U/55s7kVVkovPiijhITj52d48vw0T16Y4fj5GS5MFxc9zgR+jViuINRPM6OSAaWqx9mpQlsld+efo7ZwCamVzVWFShiQrHg+jkittG/VU85fLfAHXzyJAK4Q9DbNVxjuizNbqnJmqoACQ6kY06Gyen5j9opCbVlq1ddabna+7BET8AlSGFMxl0RM8HxqZQTqywQExwQC3exeXpgpLShxUM+WvgTZML7wyaNnmciW8FRxwjH7qjw3mScVcxhIxfjtH7110Xvb6gH8gc891dZDvN3yz9fKZs4i2eh13yuezzPjOZ48H4j48VDQs8Xq0gfPwwR+jViuRR5NM+uX3EfL49u1FOunqpHvXP3AtZItVvDrfNwVLxC54CEAZ8MVmxDsU1VwfGUwFSNbrLJrOM2Fq4VgJlD2GlImlcZSAzFH2DGY5OJMqZYnXvZ8Yq4TLBhyhL2jmYYl881SFiMrrNm9dAUaW3jPcXa6RDIRY0s6zunLOS7OlIg5EHMdqmHpgdp4pb2KeM38vFXP57nJAnt8XfIh3knfvxUUm3uf0UMuykTqtvefK1U5EVrjT56f4fiFaZ6+mKvFouaTjDnsv26QW68b5Ladwdft97c+vwn8GnD4xDjHXpjC832SMZfRgeSSzZ+jaeb4TJHAER24UrYPpIjVLblfjPqpatwRStVAzCo+vHAlPyfEflDkyw/dKRL+PB9VmC5UUYLjq97CXHid9z3pBuJ9OVfEdYTnJoNgaMVTKigCpFJBdk6p6i+6ECmywqJ6OQsGtwgXp4uUPb/20IrcQfXvsz/hNs0KgoUWcabJoqZL2RJxx2lLtDsZCOymwPF60Y0PufFssSbkT56f4ckLMzw3Odvyo7ulLx6K+FBN0G8c6Sfmtp/dbgLfYQ6fGOedh56oFanyKh5nruS5YWsfriMtfb2RwN378FGUQIyiFaWBP25pIagXyYlsiXwlyFSJu0KpGnyqBpIuXij6EAhzqw9ctDmsP9aWpTuUjnM5V6yV5vV9bag5o8B0sYrrBO6jZguRInF97998mxuONBfXVtZ7RNULBhwJugKVqtfw+2hYpqCd2vMzhUrt/dfPMHZtmXMpNTtXRCcDgZZFsr4POd9XnpucrfnJI1fL5Vyp5TG7htPcet0gt4aCftvOQa4baizqdy2YwHeYD3zuKa7mK0HRrrBGugecm8pz3Za+loGfSNR8X/FUKfhe7QMyvzb6YkQi+Yb/9CWKlVkqnlIOxd0NS/PuHQ3SDk9cmMYLKzMuJt6xMAtmKYRAvJOxoE5MtlitBVbnowrXbw2qNtbXdf/A557i5ESuFuD9+gtTtZTK0YFkLa++xYy2RqnJDvU++8D3HojifKFtJhZArbRwNMNIuM6CqXUr0e5kIHAzZZG0Yq0ecqWqx9MXczU/+fHzMzx1YYZ8i8+56wj7xjLcunNwTtCvG2KoL950/5ViAt9hTk8GqYKu4+CIUvUDS76qtFxZGFmMFc8L0gdDISpWPM5dLbClL75kEHD++U5O5HBFSMac4CGjQSGxUtVHNagJ4yPcMJwChOevtP5DEIKHVb2fvfl+MDYQpCbOFKuLelFUaUhTPHlpprYa0ZUg8Ftv+fsKF2eCNM/B1LV9jKOMHZ8gWye6D/OFdrEuWVEJY2he6qCVaHcyENiLWSTLpRMPuRSjjZkAACAASURBVOlCpeZaOX5+mifPz/DMeC5IG25Cf8LlJTWrfJBbrxti3/ZMLRV4pURGYHx0z8ta7WMCv4a4juA6Lp7vo8qC8rn1gaG4K0zmqsRcB1epuXiSYWpfq2Ob8eCRU8QdJ+yuFARqvWrQjKPqK98+PwMEfvjpQoUbtvaTdIVSi7SUvoRLtTgvONkEH8gkY5yfLrZl8UdczpWYKlSZKlTw/eZNQCB4KGRL1SWzC+JhBcx6nDAryHUc3nbwxbVGIM2Etl2xWK5od2ql6bU8PHot62YlDzlV5cJ0seZaefLCNMfPz3B2qtDymNGBZM1PHlnne7b14zgrc7G0ot5tiPot/wBM4DvM3pH+YAFOmKGiGuV9S0OtjHcdeoJt/Qly5aAW+47BZC3zxRHBEQdPle2DSc5eLZCMuwuCR7CwVd3B/WOcmcqzfTDJhemgu1Eri8NXuFqoMnNumsVcf1cLFcYyCa7kg9zzxdITT1/O4bfRVCaypi/nSkzkyhCW5y0vcf6lTh10dlq400h/IphVAI+eurKooEViMZEt1hZyuY7wxlfsXLBvt5QHWM44ujEguVLafchVPZ/Tl2dDIZ+zzOf3Fa7nxpH+On958H1sINVy/04w323YijXp6NQuvdjRKWpEnS1Wqfo+MScQ6m39idoS/myxwtmpAjFXuGk0U+v9GXPmFiH5Yb56tCpz3/aB2jWiLJnLs2VypWClpob+/lu2B/71iq/kilXGs6W2gqNOk0yaems9GXPYO9LPs+M5yktY50u5cgBuGA4aV0+HbfJmClWqYepmZZHzt3Pu+fu5MldU7fotKWKus6Dz0vyH5ANffJoPHX6Wqu+TdB2G+uLEXZc33X49j566wsnxLOWqT9wVbg5LKm8UcayvNRTRi238CmWPpy7O1FnmM5y4MFNbeT2fhOtw845MaJkPcevOQV5y3SCZ5PrbxfUdyf7uvp/OlyeeX1hjBLPgO07UBKPeknj60kytmQQEi5CcsBiWiLB9IMW5q4VaUNYPuyMNpOJM5MpNMzVOXJwhKglZ7w45cSlXW7FZ8YKuRuXFTOIQ1xH8efvV/1b2fCZyJSptGAhL+emH++LsGu7jY/e8pvbBTbgu56cLONKuhC89hiio7CmkYsF9rq8nf//nTzBb9ppaso+eusKu4XSDCE5ki3zo8LNs7Y8zna+AQKESzFpaWcDd6ArpxaybK7PlUMina4uF5reFrGcgFWsQ8tt2DnLTWIb4MlIS15JmbsNmmMCvAc0qH9b/45Q9H2GutksgOsrFmRKD6RjlalAj/caRDMN95aaZGp5C3Al86s0ksRgGU0WkqXU+HwchKF7QHFWYzleWdJEseg0J3vNMscKxF6Y4fGK8oZkHBP74qh+IcrP3pTSfbTQdM/CirWnOXi1y02imIQUtHQ/KINeLeH1qXTMRjGZlM4UqTuhK830lW6yyYyjWNJe+G10hGznrZm4J/3SDZb7YEv6dQ6nAT16XX75rOL3ilMS1pD7GsBgm8OvA/ACQK0G1xHqrvuz5JGMOqbjbUPirVaZGLGxy3Uzoqp7iCPQnY4wOJKl6Wlvo1AyBJf3mCddBBCScZSwHJ1yVC9RcUNEK3fpmHgOpWFhGQfE9j8v5Ss39FL1PN6xh0y4x12nZeQlo2XKvmQiWqoG7pr7CpoQVMZtZwN26AGmjZN1UPJ+Tl3INvvLFlvA7EqQA31aXxXLrzkG29iea7r+RqI8xIE5LHe+YD15EbgA+AuwgSKh4SFU/uNgxG8kHv9KpdnT82ak8mWSMiVyJobC35+RsqbYwaCQT5HlPFyqk4y7j2RKe75NwXfqSc+L/zkNPcLlJ0+p6BlMxtvQliLvCTKHM5VylQeSFwHXhKZS91mmQcUfCMgNBzZqlAq31RDZS3A0FEcEnWNqfLQWplKOZBFdmKxSrXlAbPu6wa7iv4R5F9yRf8ijWLVhaimTM4Udeup2vPDPZEBcZSMXY1p+g4mtTX/Qde7fyocPP1rpPDaRitZr2M4UqVV8bYiU7hlILfNj1ftOI+vIM60n957EbarfkSlWeujDD8XNz+eUnL7Vewp+KO+zfUZ+SOMj+HYOkE6uTktjNiMhRVT3Q7LVOWvBV4N+o6jERGQCOisgXVPXJDl5zTajPU5/OV7gwXeDYC1P86sEX8/bX39zW8fMfDjAX8Z8tebWFQZOzZRwRymFaY8INXAFlz6cPt3bsUmVDIbCAomqF0/kyiZhTO2867vDL3/9iXr5rC7/80aO1vMR4WMq3XsCDjkmBmyYZc0jEhKv5alueciWodeNr1GUpsGivFipIeO6LMyX8MAfT85VsyePZiRwxR8iXPEqeT3/C5ZfuvJFPHD2LKwSFz9pYXauqPPKdidr5RaRWf+ZHXnZdy1aAh46dq/nai1WPal65/YYhjp2ZrqWwuk4wGxlIxZtawN3sClmv7B9VZTxbWpBf/txka///cF+8YcXnrdctfwn/ZqGTPVkvABfCn7Mi8hRwPbDhBf7BI6eoeB6TuUqtFZznKx86/Cwv37VlyXzjZn7YN91+PRAITb4cLHCKOw6uBDVkahkgTvAhFl/Jlaq1HqTtWLBVT2tje9ehJ4J0zdB/Xaj4PPDISd7+2n1syyRxJejYlJ9XSAyC6Vih4hF3hETCYabozVnk4XgXwydYzp1wgwdVYdYLUkGdwOsfcwJ3k+qcxV/2gv6sCVd4yY4BChWPQ8fOkUm4PDuRa0vcJRzfdKFKwhVu2TFYey1frtZaAc63ZCPXylA6VatueTlX5NiZaYb74mSL1WChmEJf3OHGkUxTC3g9XSGrNeNcSXA4WsJ/vM5X/uT56UVnnnFXSLgOMdfhF753D2/+7hvYMbjyJfybhTVJkxSRPcAR4KWqOjPvtXuAewB279796ueff77j41kpd97/CFdyQXnami9Zgy5C37Vn66KpZVGAtepp2JfUr/m8RweSTOcr5CtzAjnfTRL5iAO3iLJjMMV4tlSzxBdDgD/7+e/iwSOn+NrpyaZuFRG4fjBJMhGj6umiK1ojAsNJiDuCiNT82deCMNfBqRX9CZf+hMvVQqWtjKB66gOyL9raVwvmLuYqaeZaeXY8S9lTrt+Sbvh3dB1hWybZUgTXwxVSb1TUP1ja7dF6LccXKx4nL7W/hD/mCDeNZbht5xBHn79CueqzpS9Ri230YtrmarFeLpro4hngvwPvmC/uAKr6EPAQBD74To9nNbhhuI8L04WGFKrIXdEstaze+pnIlhhMuVwtVHGQBgv9wvTCYkTNbojnBy3vIMgb90NLfCmtcx3hfZ85zsXpQst9VeFSrsxQWpkptF7s0TieYKTqK8m423Zu+nyi4xYTdwiCm61q2ixFvT1zfjpYmTiYXrzJx0AyxjPjOTzVWm/Ykhf47s9PF3BCH0/ZD3IwXQlSJe99+CgDqVhDkHw9XCErDe4udfx0vsLxC9O1KonHz8/wzESu5erlaAl/rVLizkH2bc+QjAXGy533P8LW/sSCLKeNnLa5XnRU4EUkTiDuH1XVT3XyWmvJvXftDcv/Bn/MqkE7ubjrMF2ocOf9jzT41utdMpezJS7nKsEKVXcukyRiKXGcbx3PLKcJgCrlqreo1Rst4R/NJJlcImg7n8h1c620+1BY6gHQ7jUqnnJmKs9YNUki5jZ1lRw+Mc5ErhQGUYM4xtmpQhhQ9XHEwXGEStWvuZMuzpRqWUj13bHWKx1ysTz3B774NB/+ymlmy14trjE/jhT1uw1mLT6u45CKO5y/WuD7PvAI5662t4Q/EvMXbe1bdAl/N8cqNhodE3gJHr9/Ajylqn/QqeusBwf3j/GrB18crmwMsirirkO25DE2kGjwrfcn3AbrZ8dQiucm80FTaLdJiuHqrOtpSlVZsm6LahBYnciVOjqWbsFXmMpX+NWDu5uK74NHThFzBFeoPRjjrjCWSXAhW66tFYjq8sQcCdctOIhDLStnvsW8lgueWgmm+j4ffOQZHIGYE2z74CPPAPArP3ATz07M8uSFafKlKlP5uYyrqu/X4iyRuIvAjdv6eUldFsu1LuHfKGmbG4FOpkneCXwZ+BaBcQfwW6r6t62O2UhpktDoT42W2M9vMXd2qsC+sQzZYrXmq62GAcQogBQF6JZiNfTWYe4fo9PX2iik4g57tvbx+d/4/gWvvfp3/p6ZYuBOk7rZ2lAqxuhAitOXZ/FUg9mcI7WWiMnY0t2qrtUnvlxaXe9yrkTFC3rfqhJmS0UPMWfJYPlQKsa/+aFbuG3nILfsWN0l/N2WttnNLOaDt1o0q0SrHOeT4znScafWCWklwplos8zAUsQksOZ7mSjg6fmtV+POZ1t/fEEdmZf/u7+jUPGIOXPxllKYn78lHSNX8tjaHyfhOpy7GqyedMNes4Kwc0uqVuM+ChK2qv0S1ZdfrlXfzmwg2uf5yVmG0nFedv0Qnzx6Flj88ziYilEKV1IHHcHm4hC+su75+8Y6B1k3A4dPjDNTqHBxukgyFqyUnC0HC3Ac4GohsIRWahWvhrgLgbj3uoWudV/tMlMM/OXvPPQEqZjDRK5cs2JVvYYeri7KdUNBBs2V2UoYTM3UKmJmQ+HPJAP3TL2LoXU/1zx7tvUtq4xBq7Tbf6/K3rFMw/L9U5dzXJopcX66yFMXswvOVb8I7Y9+6nZu2znI9VvS/NQff7VlMTKjuzGBXybzraVoEUx/0qUQivps2cORwC9Zl/HYFYIajSEqAdDLLKcGPQRB1xeu5Gv3JeHOzcaqPvga/GO6DqRiLiLC6ECK/mSswfret32QO/ZubVljvplP/NJM6ZoyXYIYQTBbmMpXmClWyBWr/MJftJ4JOwIvHs3gOsJ3LmWDhjQCStCj9td+4CaSrsO7PvlNzkzlGUjGmA4zqswnvrEwgV8GUcnYaLl61fM59sIUW/vjjGRSJGMuL9TljesyaqSsNb0u7tdK/X2phllS0aZ03KUUZstE/VuhufX9kceeZzSTbHioR8bB05dmaq6dqOVgxffZtSXdMJZmqYGf++YF/vM/PsPZqwUSrsOVfBl/CTeUK3DXzaO8/tbt3LZziP07BmpdhZpl0bx815aGWUGh4iEEwffpQsV84hsI88G3yeET49z78NGgC1AYlKqE7fcgyO0dHUhy7mohXPS0vuM1Vo9I5F1HgkVW84LpJy9lQWDfWFCjf6ZQ4dzVQm3xTlQ3Rwhy7tNxN+hala/U8uSnZksNdXBUlWyxQjoR48defh3Hz89w9PkpxrOtGzcvxkt2DDS0F1yMzVIfvlcwH/w1Uu+OmSlUqHg+iVhQSNerE3eA2bJHfjIfrEpdtxEbncAnaMr9qt3DTbs7VX1lNDPnU7+cC+v7h+WZ+xKxIJ1Qg4qepy/PBvnkIoxmkjz8S9/D7/yP4zz81Rdq5SOi1EuAE0385Qk3yEX3wz6y6OIL3Z4Zz7X9fnuxPvxmxQS+BfODVxeni0Gz7LBphtdk5lMf1Ov1IOZmImgIHuOOvVt58MgprubLtQVmEn5N5ir0JSoMpuML6vtDEA/wfeXcVKFW3Kzs+Tx1Mcst7/1cw+KteqGOOcK+7QPcet0gX3zqElv74qQTsdoSflXlxMUZYjEHv9K6XEV1GTN1W2jUO5jAt2D+8uxkzEGrHp6veOo1LFCaL+ZR4S3zc3ceRwLrur5+z2ojwJ03bePQsXPEXaFY12QhaqtY9ZXzV/MMpAaDWjqesrU/Qa5UpVD2arX6mxkGkbg7Aqm4Szru4gjsGEpz6JfvqC3hj1wnbt0q0ELFw3UcbhrNkCtVW1ZhrIsXL4ktNOodrL5mC85M5RuaP0TNOJSFjZ7n/8lWPDVxXyN8hRePDdCh5vVAsMrzr5+4wPhMMagDFD5LhECwo5WuFR9euJInFpZYPjNV4PTlWS7OFJsuZBOCPHNHYN9Y0PvzxaMZdm5Js30wxdV8uSbuEAhvxVPy5SqqWku/3DvST6HiMZCK14yL+ms4wE2jmbbf78H9Y9x3922MDaSYLlQYG0h1bBGW0VnMgm/B/GnqYDqOcxVUCFcsQslEvCs4NZFru+HHteArtZWe56YKtQd69LAv1kXUm9UGEoLVssV5LpSo+1NMhDNX8g3FzFxHFrhE6rv41KdfAjWLe+dQirNThbDSKSRiDplkjPf88EuW9Z7Xqz68sbqYwLeg2TTVB24YTgPC5VyJknfthbWM1eNaK0u2S/Qcb2ehWX/Sper5eD4MpWP0JVwuTJcoVfxaqYMIX6EUTgck7AQVFTMb7ovz2z9664LztxLeeuG/efsA2UKZidlK2CEruWB/Y3NgAt+CZtZSqVzl/NUCHXT3GmtEX8JtWZv8WnAkaPaxfTAVBuR9skWP2ZJXK5nAvBXEQQOScEYoEhQq83xirrCtP9FUyFuVJagX/ihBYNdwrGacdENzb2PtMYGvo9kfT5T3e/jEOO869ISJew+QcIXf/4lX8Of/6zRfe25qxedLukGgtVgNauhHXbBEgqJyqbjTIOrR92TotomHJZr3jgZ59FFhsvm0KkswX7i7tbm3sfZsOoGPRPxb56YoVIKG0ZlkjNftH+XoC9PE3SBg9vUzU/ziRx7n5rEM737D/mBJ+HJSEYyupewpv/LRY9d8/PysKS8wzhG0sf1cuFM1bGBejxK4Z6IOU/Upla1SEtsVbstjNyI2lcBHFtBMoUyu1BgY+/Q3LtCfcBjJpDg/XQy7LcHpy7O87zPHmS1VyLbZ4cjofkTAlcVbA7Zi/hFVXxv863FHqNSVD2h1DQ3/4/nKQH8MDRcttUpJbFe4LY/diNhUAh9ZQK26IM2WfQpT+TAjYy5X4tzVfNiWzugVtEVO+krOF+G6QRuQ+nIVSVcasq6CYnRC3BVG+uLcsC2zZO3zdoV7o+axr2UTlM3CphL4yAJazGhr9pqJe2/SqczKctUnHXeJ+UEDDVcE1xFKXlC0Kxlz2Le90d/eTo2XdoW7VTplN4tlu/EFY3lsKoGPLCDD6ARDSZfZSpAFc+NIPycuZlFVNCxNEPnbi1WfbLHCQGrxZt/zWY5wb7Q8dgsMd4ZO9mT9U+DHgHFVfWmnrrMU9dO+qK71/Hxkw1gpMYF81We4L8ZMMage2ZdwKVaC7k9BGqRTq1MzPhOUHFiu62SjCXe7WGC4M3SyVMGfA2/o4PmXJJr2jWeLbKkrApWuW/5tGMtlfjKVA8RjLg5CtuRx++5hvvzu1/LAW16Fp0GmlqrW2ggmQn+8lQCY44bhvqAqZh0WGF45HbPgVfWIiOzp1PnbIZr2VT3l9PRs7QPUyWXtRu+TjLkUqx7xsIVfzHXQ8H/linI1X+bO+x9hIBnDISo6pyRiDruG0sRcWbK2en1zkIoXHLtvbKDrfenXykYNDHc76+6DF5F7gHsAdu/evarnPjOVxxU4P11Ew2p+hnEtCDCaSTCQjtd6kY5ng+JjE9kSZc8HDcoNBLXe4eR4Dg1Xr7quUPV9zl/N4yMkXIcHvvg0j566siBrJJp5lqteLeOrUPZ4bjLXs4HHjRgY3gh0tKNTaMF/tl0f/LV0dIosnZPjWcpVn7gr3Lx9kHvv2sv9nz/Bdy5lTdiNFSHA7q19iAS+85Kn7BvtZ3K2XOvQVKh4nJ0q1No3nprIBfnvGuTcQxBcdSSoZ1Sq+kzkyowNJOba9nnKfXffxoNHTjGeLXJxukjVU5ywOmXMEXYMpayzktFAz3Z0iiydiucxna+E/k746ulJvnZ6ctEON4bRiqhGTPRzKu4iAuevFlGUVMypLWQqV4PiYBD0Zr2SK3M5V641hnFEalUiE2FJg8F0glMTORyBmUKVkUyqIWskCjhGXZ9grvKkBR6N5bChBH7+Qoip2aAT/WSuijLngrEMGeNacSVoqD2SSXI5V2IiV2YwHWN8JhB3CHoD9CVizJaqjGdL7BpOU/V8XrhSoOQpCVdAgpIIMSfIe5/f5ansBdZ8uW6RRSTeUTpvwnWCMgdh1lfCdSzwaCyLjmXRiMjHgEeBW0TkrIj84krONz8jZjxb5OREjqrnU/Z8c8MYK2ZLOsbN2we4cSTDdKHCjSMZfv21N7FnWyYUboedQ2kGw3S+bLFK1ffpS8S4nCvXsmsqnhILLe+qr4xkErgi+DrXOCbhOi1r0ESNPQZSMXyUqu/j+8pgOmaBR2NZdDKL5q2reb5mCyHijsOlbImE6zBrtdmNayQVc1AN6spPZIt87h13Nbz+duba5dWXCShVfZJ1FnnMdRDfD0oUSGC5R83ZbxzpZyJXIuYKqoF4R7OD+TVo6gOOVW+GcphFs2dbxgKPxrLYMC6aZgshtg8mOXu1yPBAvFai1TCWi4ggAr6vLZt6NEvjcx1hqC/4TEbuFMdx6IsJe0cz5MvVhoBo5GI8O5XnxpEMP/XdW3n01JWmWSO9uqDJWFs2jMA3K7QUcx1uHsugqlyYLq3j6IxuQ8Kv3dv6ODNVCBputEAJgvNo0OKuGc3S+N74ip0cOnaOfLnKSCbBuatFUNgxmKz1S613p8xvymGFtYxOs2EEvtVCiLFMjMdOr7xpg9EbuI4wnI6RLXnsGAz83f4SAZqobV7clQXt7ZYS4pfv2lIT/ZtG+xERcqXAcm8l2lZYy1grNozAN7OgUJ9HTdyNOnYOpfjyu19b85lfnC6GvU6bi7wQCDsEK5wnciUOnxhvWHC0mBBfiyvFCmsZa0XXC/x8C2rHYILj56c5OzVpPndjAf2JoM5QNOMrVj1iTtDvtL7xhgBb++LMVjw8P8iQGckkKXseb//41xlMx5kpVOhPugylg5WrqyXEVljLWCu6WuDnW1DfuTjDo6esq5LRmtmwkXY043v7x79OvuyRjDlcn0kymI7Xgp9npvJctyWNhCmN2WKFy9kySrBy9eJ0kULZIxlzGUgFgrwaQmwdl4y1opPVJFdM/VQ2V6pyJW/ibizO+ekih0+MA4HIP/CWV7FzS5odQykGUrGG4Of8CoYT2VItvVFESMYckHB7yGoIcZTnni9XUdWmAVnDWA26WuDPTOVJx13GZ4o8P2nTV2OuhMD8bVHWTNwVHjxyqvbawf1j3Hf3bYwNpJguVBpK9M4X2mI1EPtoMVL0vVj1VlWIFxuTYawmXe2iuWG4j+cmc1zKWgrkZifqhkRYnbE+/hKVpnAdYftAcoELpVUgdH7gvj8Roy/h1laqDqbjlKoe+XLQwGM1KxxanruxFnSlwB8+Mc79nz/ByfFsQ+NiY/Ny81iGk+M5wgKNDQhB/vqOwVSt1nq7zM9Nn5+Km4i5fODHX25ibGxIuk7gf+Pjx/j0Ny6s9zCMNUSAbf1xsiWPUpMn+g3Dad7zwy/hnYeeIFeq4vkadEZyhETcZaiuZO9KXChWk9zoNTpaD3657L75per8+P3rPQxjjXAF9oz01+qgA/z6X32dmUIVJRD+wXSMD775VbW89PniCybIxuZmsXrwXSXwqev26Y6f+8P1HobRYRyBmCOICLfvHm4Q5WYiboJtGK3ZMA0/uudRY1wLbtgpY7G6L3FX2NafIBFzm2aOWPDRMFaPrhJ4Y+MSdT4aSMWo+krF80N/+dw+I/1x0omYWeaGsUaYwBstiTuABHVckjGHqh98T8eEXDlQ7r0j/fzwS3csKHsL5hs3jPXGBH4TI8D1Q0l+8rt2Nwj0jsEE/3BigtmyR3/c5W0/cCNvf/3Ni57r7U22maAbxvrSUYEXkTcAHwRc4MOq+oHF9k+4DpmES65s3ZnaIe7Alr4Ev/emVwArs5ibCbRhGBubjgm8iLjAh4AfBM4C/yQin1HVJ1sd4zrC9qEUhclZtvbFmchtztozUV746ECKXKnKruE+7tgbdP85OZ6lXPVJuMK+7YMLugAZhmFEdNKC/27gGVU9BSAiHwfeCLQUeM9XxgZSxB2h4iulis9MaeNb8//ildfxn95yO7CyNECzsg3DWA6dFPjrgTN1v58Fvmf+TiJyD3APwO7du/nYPa+pLRkfHUzBTIGZ0vrUK0hEM4qKR77kUfY8XMdh70g/737D/muymC0N0DCMtaKTAt+k7t/CVHdVfQh4CODAgQMKjUvGy1WfnVtccqUq568WiaS+L+7yQ7eN8dSFLM9M5PD8pfPoRzIJ0nHXsjoMw9gUdFLgzwI31P2+Czjf7sFm6RqGYayMTtaD/ydgn4jcKCIJ4C3AZzp4PcMwDKOOjlnwqloVkV8D/o4gTfJPVfV4p65nGIZhNNLRPHhV/Vvgbzt5DcMwDKM5Xd2yzzAMw7h2TOANwzB6lK6qBy8iE8Dz6z2OdWAEuLzeg9gA2H1aGrtH7dFL9+lFqjra7IWuEvjNiog83qpgvzGH3aelsXvUHpvlPpmLxjAMo0cxgTcMw+hRTOC7g4fWewAbBLtPS2P3qD02xX0yH7xhGEaPYha8YRhGj2ICbxiG0aOYwHcAEblBRP5RRJ4SkeMi8uvh9q0i8gURORl+H6475jdF5BkR+Y6I/FDd9leLyLfC1x4QkWZlmDcsIuKKyNdF5LPh73aP5iEiW0TkkIicCD9Td9h9akREfiP8W/u2iHxMRFJ2jwBVta9V/gKuA24Pfx4AngZuBf4f4D3h9vcA94c/3wo8ASSBG4FnATd87WvAHQT19T8H/PB6v79Vvlf/GvhL4LPh73aPFt6jvwB+Kfw5AWyx+9Rwf64HTgPp8PdPAD9v90jNgu8EqnpBVY+FP2eBpwg+hG8k+GMl/P6/hz+/Efi4qpZU9TTwDPDdInIdMKiqj2rw6ftI3TEbHhHZBfwo8OG6zXaP6hCRQeAu4E8AVLWsqlex+zSfGJAWkRjQR9B7YtPfIxP4DiMie4BXAV8FtqvqBQgeAkDU0aRZe8Prw6+zTbb3Cn8I/Fugviej3aNG9gITwJ+FrqwPi0g/dp9qqOo54PeBF4ALwLSq/j12j0zgO4mIZID/DrxDVWcW27XJNl1k+4ZHRH4MGFfV+6XRLQAABDNJREFUo+0e0mRbT9+jkBhwO/BfVPVVwCyBu6EVm+4+hb71NxK4W3YC/SLyM4sd0mRbT94jE/gOISJxAnH/qKp+Ktx8KZwGEn4fD7e3am94Nvx5/vZe4PuAu0XkOeDjwGtF5GHsHs3nLHBWVb8a/n6IQPDtPs3xeuC0qk6oagX4FPC92D0yge8EYeT9T4CnVPUP6l76DPBz4c8/B/xN3fa3iEhSRG4E9gFfC6eVWRF5TXjOn607ZkOjqr+pqrtUdQ9BO8dHVPVnsHvUgKpeBM6IyC3hptcBT2L3qZ4XgNeISF/43l5HEPeye7TeUd5e/ALuJJjafRP4Rvj1I8A24B+Ak+H3rXXH/F8E0fzvUBe5Bw4A3w5f+8+Eq4976Qs4yFwWjd2jhffnlcDj4efpr4Fhu08L7tG/B06E7++/EWTIbPp7ZKUKDMMwehRz0RiGYfQoJvCGYRg9igm8YRhGj2ICbxiG0aOYwBuGYfQoJvCGYRg9igm8sSkIF7V8UUS+ISJvFpHfWsG5cqs5NsPoFLH1HoBhrBGvAuKq+kqoifT/vb5DMozOYha8sWERkX4R+Z8i8kTY6OHNIvKGsDHGV8KGDZ8VkTHgYeCVoQX/SYLSst8QkY8ucv6/FpGjYSOJe+a99v+KyDER+QcRGQ23vVJEHhORb4rIp0VkWEReIiJfqztuj4h8M/z51SLypfAafxfVTTGM1cIE3tjIvAE4r6qvUNWXAp8H/hj458A/A3YAqOo48EvAl1X1lar6E0Ah/PmnFzn/v1TVVxMsX3+7iGwLt/cDx1T1duBLwPvD7R8B3q2qLwe+BbxfVZ8CEiKyN9znzcAnwmJ0fwS8KbzGnwL/YcV3xDDqMIE3NjLfAl4vIveLyD8jKBd7WlVPalCD4+EVnv/tIvIE8BhB9cF94XYf+Kvw54eBO0VkCNiiql8Kt/8FQaMOCDoM/WT485vDY28BXgp8QUS+AbyXxkqGhrFizAdvbFhU9WkReTVBIbf/CPw9q1S/W0QOEpShvUNV8yJyGEi1GsoSp/sr4JMi8qlg2HpSRF4GHFfVO1ZjvIbRDLPgjQ2LiOwE8qr6MEFHn+8FbhSRF4e7vHWRwyuhm6QVQ8BUKO77gdfUveYAbwp//ingK6o6DUyFMwmA/4PAfYOqPgt4wG8zZ/l/BxgVkTvC9xIXkduWfNOGsQzMgjc2Mi8Dfk9EfKAC/DIwAvxPEbkMfIXADdKMh4BvisixFn74zwP/ZxgQ/Q6BmyZiFrhNRI4C0wRuFwhqjv9XEekDTgG/UHfMXwG/R+BGQlXLIvIm4IHQvRMjaGF4fDk3wDAWw8oFGz1L6GZ5p6r+2HqPxTDWA3PRGIZh9ChmwRubmjD18R+avPQ6VZ1c6/EYxmpiAm8YhtGjmIvGMAyjRzGBNwzD6FFM4A3DMHoUE3jDMIwe5f8HwqR5gCJN9CIAAAAASUVORK5CYII=\n",
"text/plain": ""
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": "\nWe can use the Pandas method corr()
to find the feature other than price that is most correlated with price.",
"metadata": {}
},
{
"cell_type": "code",
"source": "df.corr()['price'].sort_values()",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 15,
"outputs": [
{
"execution_count": 15,
"output_type": "execute_result",
"data": {
"text/plain": "zipcode -0.053203\nlong 0.021626\ncondition 0.036362\nyr_built 0.054012\nsqft_lot15 0.082447\nsqft_lot 0.089661\nyr_renovated 0.126434\nfloors 0.256794\nwaterfront 0.266369\nlat 0.307003\nbedrooms 0.308797\nsqft_basement 0.323816\nview 0.397293\nbathrooms 0.525738\nsqft_living15 0.585379\nsqft_above 0.605567\ngrade 0.667434\nsqft_living 0.702035\nprice 1.000000\nName: price, dtype: float64"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "# Section 4: Model Development",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "\nWe can Fit a linear regression model using the longitude feature 'long'
and caculate the R^2.",
"metadata": {}
},
{
"cell_type": "code",
"source": "X = df[['long']]\nY = df['price']\nlm = LinearRegression()\nlm.fit(X,Y)\nlm.score(X, Y)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 16,
"outputs": [
{
"execution_count": 16,
"output_type": "execute_result",
"data": {
"text/plain": "0.00046769430149007363"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 6\nFiting a linear regression model to predict the 'price'
using the feature 'sqft_living'
then calculating the R^2.",
"metadata": {}
},
{
"cell_type": "code",
"source": "X1 = df[['sqft_living']]\nY1 = df['price']\nlm = LinearRegression()\nlm\nlm.fit(X1,Y1)\nlm.score(X1, Y1)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 17,
"outputs": [
{
"execution_count": 17,
"output_type": "execute_result",
"data": {
"text/plain": "0.4928532179037931"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 7\nFitting a linear regression model to predict the 'price'
using the list of features:",
"metadata": {}
},
{
"cell_type": "code",
"source": "features =[\"floors\", \"waterfront\",\"lat\" ,\"bedrooms\" ,\"sqft_basement\" ,\"view\" ,\"bathrooms\",\"sqft_living15\",\"sqft_above\",\"grade\",\"sqft_living\"] ",
"metadata": {},
"execution_count": 18,
"outputs": []
},
{
"cell_type": "markdown",
"source": "Then calculating the R^2.",
"metadata": {}
},
{
"cell_type": "code",
"source": "X2 = df[features]\nY2 = df['price']\nlm.fit(X2,Y2)\nlm.score(X2,Y2)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 19,
"outputs": [
{
"execution_count": 19,
"output_type": "execute_result",
"data": {
"text/plain": "0.657679183672129"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### This will help with Task 8\n\nCreating a list of tuples, the first element in the tuple contains the name of the estimator:\n\n'scale'
\n\n'polynomial'
\n\n'model'
\n\nThe second element in the tuple contains the model constructor \n\nStandardScaler()
\n\nPolynomialFeatures(include_bias=False)
\n\nLinearRegression()
\n",
"metadata": {}
},
{
"cell_type": "code",
"source": "Input=[('scale',StandardScaler()),('polynomial', PolynomialFeatures(include_bias=False)),('model',LinearRegression())]",
"metadata": {},
"execution_count": 22,
"outputs": []
},
{
"cell_type": "markdown",
"source": "### Task 8\nUsing the list to create a pipeline object to predict the 'price', fitting the object using the features in the list features
, and then calculating the R^2.",
"metadata": {}
},
{
"cell_type": "code",
"source": "pipe=Pipeline(Input)\npipe\nX = df[features]\nY = df['price']\npipe.fit(X,Y)\npipe.score(X,Y)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 25,
"outputs": [
{
"execution_count": 25,
"output_type": "execute_result",
"data": {
"text/plain": "0.7513408553309376"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "# Section 5: Model Evaluation and Refinement",
"metadata": {}
},
{
"cell_type": "markdown",
"source": "Import the necessary modules:",
"metadata": {}
},
{
"cell_type": "code",
"source": "from sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import train_test_split\nprint(\"done\")",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 26,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "done\n"
}
]
},
{
"cell_type": "markdown",
"source": "We will split the data into training and testing sets:",
"metadata": {}
},
{
"cell_type": "code",
"source": "features =[\"floors\", \"waterfront\",\"lat\" ,\"bedrooms\" ,\"sqft_basement\" ,\"view\" ,\"bathrooms\",\"sqft_living15\",\"sqft_above\",\"grade\",\"sqft_living\"] \nX = df[features]\nY = df['price']\n\nx_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=1)\n\n\nprint(\"number of test samples:\", x_test.shape[0])\nprint(\"number of training samples:\",x_train.shape[0])",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 27,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": "number of test samples: 3242\nnumber of training samples: 18371\n"
}
]
},
{
"cell_type": "markdown",
"source": "### Task 9\nCreating and fitting a Ridge regression object using the training data, set the regularization parameter to 0.1, and calculating the R^2 using the test data. \n",
"metadata": {}
},
{
"cell_type": "code",
"source": "from sklearn.linear_model import Ridge",
"metadata": {},
"execution_count": 28,
"outputs": []
},
{
"cell_type": "code",
"source": "RidgeModel = Ridge(alpha=0.1) \nRidgeModel.fit(x_train, y_train)\nRidgeModel.score(x_test, y_test)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 30,
"outputs": [
{
"execution_count": 30,
"output_type": "execute_result",
"data": {
"text/plain": "0.6478759163939122"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": "### Task 10\nPerforming a second order polynomial transform on both the training data and testing data. Creating and fitting a Ridge regression object using the training data, setting the regularisation parameter to 0.1, and calculating the R^2 utilising the test data provided.",
"metadata": {}
},
{
"cell_type": "code",
"source": "pr = PolynomialFeatures(degree = 2)\nx_train_pr = pr.fit_transform(x_train[features])\nx_test_pr = pr.fit_transform(x_test[features])\n\nRidgeModel1 = Ridge(alpha = 0.1) \nRidgeModel1.fit(x_train_pr, y_train)\nRidgeModel1.score(x_test_pr, y_test)",
"metadata": {
"jupyter": {
"outputs_hidden": false
},
"collapsed": false
},
"execution_count": 31,
"outputs": [
{
"execution_count": 31,
"output_type": "execute_result",
"data": {
"text/plain": "0.7002744279896707"
},
"metadata": {}
}
]
}
]
}